//在字符串 s 中找出第一个只出现一次的字符。如果没有，返回一个单空格。 s 只包含小写字母。 
//
// 示例: 
//
// s = "abaccdeff"
//返回 "b"
//
//s = "" 
//返回 " "
// 
//
// 
//
// 限制： 
//
// 0 <= s 的长度 <= 50000 
// Related Topics 队列 哈希表 字符串 计数 
// 👍 128 👎 0


package leetcode.editor.cn1;

//Java：第一个只出现一次的字符

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

/**
 * 在字符串 s 中找出第一个只出现一次的字符。如果没有，返回一个单空格。 s 只包含小写字母。
 * s = "abaccdeff"
 * 返回 "b"
 * <p>
 * s = ""
 * 返回 " "
 */
public class DiYiGeZhiChuXianYiCiDeZiFuLcof {
    public static void main(String[] args) {
        Solution solution = new DiYiGeZhiChuXianYiCiDeZiFuLcof().new Solution();
        // TO TEST
        System.out.println(solution.firstUniqChar("abaccdeff"));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public char firstUniqChar(String s) {
            if (s == null || s.length() == 0)
                return ' ';
            if (s.length() == 1)
                return s.charAt(0);
            return firstUniqCharMap(s);
        }

        /*public char firstUniqCharIte(String s) {

        }*/

        public char firstUniqCharMap(String s) {
            Map<Integer, Integer> map = new LinkedHashMap<>();
            int nlen = s.length();
            for (int i = 0; i < nlen; i++) {
                int ch = s.charAt(i);
                if (map.containsKey(ch)) {
                    map.put(ch, map.get(ch) + 1);
                } else {
                    map.put(ch, 1);
                }
            }

            Set<Integer> set = map.keySet();
            for (Integer item : set) {
                if (map.get(item) == 1)
                    return (char) item.intValue();
            }
            return ' ';
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}
